package com.yuexin.project.finance.bill.service;

import com.yuexin.common.support.Convert;
import com.yuexin.common.utils.SerialNoUtils;
import com.yuexin.common.utils.security.ShiroUtils;
import com.yuexin.project.finance.bill.domain.Bill;
import com.yuexin.project.finance.bill.domain.BillList;
import com.yuexin.project.finance.bill.domain.MoneyBill;
import com.yuexin.project.finance.bill.domain.RushBill;
import com.yuexin.project.finance.bill.formbean.BillListFormBean;
import com.yuexin.project.finance.bill.formbean.MoneyBillListFormBean;
import com.yuexin.project.finance.bill.mapper.BillMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * 用户账单 服务层实现
 * 
 * @author zoncont.ahanu
 * @date 2019-03-08
 */
@Service
public class BillServiceImpl implements IBillService {
	@Autowired
	private BillMapper billMapper;

	/**
     * 查询用户账单信息
     * 
     * @param billId 用户账单ID
     * @return 用户账单信息
     */
    @Override
	public Bill selectBillById(Integer billId) {
	    return billMapper.selectBillById(billId);
	}

	/**
	 * 获取需冲账数据
	 * @param billId
	 * @param companyId
	 * @return
	 */
	@Override
	public RushBill selectRushBillById(Integer billId, String companyId){
	    return billMapper.selectRushBillById(billId, companyId);
	}

	/**
	 * 账户余额报表
	 * @param form
	 * @return
	 */
	@Override
	public List<MoneyBill> selectMoneyBill(MoneyBillListFormBean form){
		return billMapper.selectMoneyBill(form);
	}

	/**
     * 查询用户账单列表
     * 
     * @param bill 用户账单信息
     * @return 用户账单集合
     */
	@Override
	public List<Bill> selectBillList(Bill bill) {
	    return billMapper.selectBillList(bill);
	}

	/**
	 * 查询用户账单列表
	 *
	 * @param form 查询条件
	 * @return 用户账单集合
	 */
	@Override
	public List<BillList> selectBillLists(BillListFormBean form) {
	    return billMapper.selectBillLists(form);
	}

    /**
     * 新增用户账单
     * 
     * @param bill 用户账单信息
     * @return 结果
     */
	@Override
	public int insertBill(Bill bill) {
		bill.setSerialNo(getSerialNo(bill.getCompanyId()));
	    return billMapper.insertBill(bill);
	}
	
	/**
     * 修改用户账单
     * 
     * @param bill 用户账单信息
     * @return 结果
     */
	@Override
	public int updateBill(Bill bill) {
	    return billMapper.updateBill(bill);
	}

	/**
     * 删除用户账单对象
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
	@Override
	public int deleteBillByIds(String ids) {
		return billMapper.deleteBillByIds(Convert.toStrArray(ids));
	}

	/**
	 * 获取流水号
	 * 流水号组成：（年月日时）+流水（不足4位前补0））
	 *
	 * @return
	 */
	private String getSerialNo(String companyId) {
		Date time = new Date();
		Bill bill = new Bill();
		bill.setCompanyId(companyId);
		bill.setCreateDate(new SimpleDateFormat("YYYY-MM-dd HH").format(time));
		List<Bill> bills = billMapper.selectBillList(bill);
		return new SimpleDateFormat("YYMMddHH").format(time) + SerialNoUtils.autoGenericCode(bills.size() + 1, 4);
	}

}
